
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.events.CloseEvent;
import mx.events.ValidationResultEvent;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;            

 /**
 * @comment Variaveis para controle de dados referente as telas de formulários.
 * @author  Diego Leão Von Kruger Sureck
 */	
private var ident:Number = 0;
private var validar:String = ValidationResultEvent.VALID;
private var refUploadArquivo:FileReference;
private var bytesArquivo:ByteArray = null;
private var imageTypes:FileFilter = new FileFilter("Images (*.jpg, *.jpeg, *.png, *.gif)", "*.jpg; *.jpeg; *.png; *.gif;");
private var namedQueries:ArrayCollection = new ArrayCollection();

 /**
 * @comment Função que ser executada após a conclusão do método save.
 * @author  Diego Leão Von Kruger Sureck
 */	            
private function onResultSave(event:ResultEvent):void {
	var r:Object = event.result as Object;
	if(r != null)
		Alert.show(resourceManager.getString('myResources', 'form.alert.salvar.msg'));
	else
		Alert.show("Falha ao salvar registro!");	
		                
	setDefault();            
}             

 /**
 * @comment Método Padrão para exclusão de Objeto selecinado.
 * @author  Diego Leão Von Kruger Sureck
 */	
private function remove():void {
	if(entidade != null) {
		Alert.show(resourceManager.getString('myResources', 'geral.excluir.msg1'), 
			resourceManager.getString('myResources', 'geral.confirmacao'), Alert.YES | Alert.NO , this, removeCompl);                    
	} else {                    
		Alert.show(resourceManager.getString('myResources', 'geral.selecione'));                
	}           
}             

 /**
 * @comment Método Padrão para completar a exclusão.
 * @author  Diego Leão Von Kruger Sureck
 */	
private function removeCompl(event:CloseEvent):void {
	if(event.detail == Alert.YES) {
		controle.remove(entidade);
	}
}             

 /**
 * @comment Função que ser executada após a conclusão do método remove.
 * @author  Diego Leão Von Kruger Sureck
 */	            
private function onResultRemove(event:ResultEvent):void {                
	var b:Boolean = event.result as Boolean;
	if(b) {
		Alert.show(resourceManager.getString('myResources', 'geral.excluir.msg2'));
	} else
		Alert.show(resourceManager.getString('myResources', 'geral.excluir.msg3'));
	btLimpar.label = resourceManager.getString('myResources', 'geral.limpar');
	btLimpar.toolTip = resourceManager.getString('myResources', 'form.button.btLimpar.toolTip');
	setDefault();            
}             

 /**
 * @comment Ocorreu uma falha ao chamar algum serviço.
 * @author  Diego Leão Von Kruger Sureck
 */	            
private function onFault(event:FaultEvent):void {                
	Alert.show(event.fault.message);            
}        

 /**
 * @comment Método Padrão para validação de dados de formulário.
 * @author  Diego Leão Von Kruger Sureck
 */	
private function handleValid(eventObj:ValidationResultEvent, flag:Boolean):void {
	if(validar == ValidationResultEvent.VALID) 
    	validar = eventObj.type;
	if(flag) 
    	if(validar == ValidationResultEvent.INVALID) { 
    		validar = ValidationResultEvent.VALID;
			Alert.show(resourceManager.getString('myResources', 'geral.validar.msg'));
    	} else salva();    
}

 /**
 * @comment Método Padrão para Limpar ou Cancelar a edição do Objeto.
 * @author  Diego Leão Von Kruger Sureck
 */	
private function limparOrCancelar():void {
	if(btLimpar.label == resourceManager.getString('myResources', 'form.button.btLimpar2.label')) {
		Alert.yesLabel = resourceManager.getString('myResources', 'form.alert.limparOrCancelar.button1');
		Alert.noLabel = resourceManager.getString('myResources', 'form.alert.limparOrCancelar.button2');
		Alert.cancelLabel = resourceManager.getString('myResources', 'form.alert.limparOrCancelar.button3');
		Alert.buttonWidth = 110;
		Alert.show(resourceManager.getString('myResources', 'form.alert.limparOrCancelar.msg'), 
			resourceManager.getString('myResources', 'geral.confirmacao'), Alert.YES | Alert.NO | Alert.CANCEL , this, cancelar);                    
	} else setDefault();
}
			
 /**
 * @comment Método Padrão para execução após a escolha de 'Novo Registro' no método limparOrCancelar.
 * @author  Diego Leão Von Kruger Sureck
 */	
private function cancelarNO():void {
	btLimpar.label = resourceManager.getString('myResources', 'geral.limpar');
	btLimpar.toolTip = resourceManager.getString('myResources', 'form.button.btLimpar.toolTip');
	btExcluir.visible = false;
	setDefault();
}

 /**
 * @comment Método Padrão para validação de dados de formulário com verificação de duplicata.
 * @author  Diego Leão Von Kruger Sureck
 */	
private function handleValidConf(eventObj:ValidationResultEvent, flag:Boolean, namedQuery:String, vlrComparacao:String, pIdent:String):void {
	if(validar == ValidationResultEvent.VALID) 
    	validar = eventObj.type;
	if(flag) 
    	if(validar == ValidationResultEvent.INVALID) { 
    		validar = ValidationResultEvent.VALID;
			Alert.show(resourceManager.getString('myResources', 'geral.validar.msg'));
    	} else confereDuplicado(namedQuery, vlrComparacao, pIdent);   
} 
			
/**
 * @comment Método padrão para conferência de duplicata.
 * @author  Diego Leão Von Kruger Sureck
 */	
private function confereDuplicado(namedQuery:String, vlrComparacao:String, pIdent:String):void {
	ident = new Number(pIdent);
	controle.confereDuplicado(namedQuery, vlrComparacao, ident);
}

 /**
 * @comment Função que deve ser executada após a conclusão do método confereDuplicado.
 * @author  Diego Leão Von Kruger Sureck
 */	            
private function onResultConfereDuplicado(event:ResultEvent):void {
	var conf:int = event.result as Number;            
	if(conf == 0) {
		salva();
	} else {
		Alert.show(resourceManager.getString('myResources', 'form.alert.duplicata'));
	}     
}